package cn.springcloud.book.token;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;

import java.util.HashMap;
import java.util.Map;

public class JwtTokenEnhancer implements TokenEnhancer {
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {

        //可以获得当前登录的用户信息。这样把用户信息附带进token。
        User user = (User) oAuth2Authentication.getPrincipal();

        Map<String,Object> info = new HashMap<>();
        info.put("addition","在token中自定义传递的信息");

        //只是示例，这个权限信息其实token中本身有的，实际中可以通过username，再去查询用户表中其他信息，然后附带进jwt中
        info.put("authority",user.getAuthorities());

        //设置附加信息
        ((DefaultOAuth2AccessToken)oAuth2AccessToken).setAdditionalInformation(info);
        return oAuth2AccessToken;
    }
}
